package com.study.bigdata.spark.core.rdd.operator.action

import org.apache.spark.{SparkConf, SparkContext}

object Spark02_RDD_Oper_Action {
  def main(args: Array[String]): Unit = {
    // 一个应用程序,Driver程序
    val conf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(conf)

    // TODO 算子 - 行动 - reduce
    val rdd = sc.makeRDD(List(1,2,3,4),2)

    val i: Int = rdd.reduce(_+_)
    println(i)//10

    // 将数据从Executor端采集回到Driver
    // collect会将数据全部拉取到Driver的内存中，形成数据集和，可能会导致内存溢出
    val ints: Array[Int] = rdd.collect()
    println(ints.mkString(","))//1,2,3,4

    val l = rdd.count()
    println(l)//4

    val i1 = rdd.first()
    println(i1)//1

    val ints1 = rdd.take(3)
    println(ints1.mkString(","))//1,2,3

    // 先排序后取
    val ints2 = rdd.takeOrdered(3)
    println(ints2.mkString(","))//1,2,3

    sc.stop()


  }

}
